<%    
    /*@ 扩展对象的静态方法 */
    Object.extend
    (
        Array,
        {
            //->from 在prototype中类似于 $A 的一个方法
            from:$A    
        }
    );
    /*@ 扩展对象的原型方法 */    
    Object.extend(Array.prototype,Enumerable);
    /*
        从 Enumerable 继承来的方法
        each,toArray
    */
    Object.extend
    (
        Array.prototype,
        {
            //->遍历数组元素
            _each:function($iterator) 
            {
                for(var _i=0,_length=this.length;_i<_length;_i++)
                $iterator(this[_i]);
            },    
            //->数组倒序
            _reverse:Array.prototype.reverse,            
            //->清空数组
            clear:function()
            {
                this.length=0;
                return this;
            },
            //->创建数组的一个副本
            clone:function()
            {
                return [].concat(this);
            },
            //->去除无效元素 null,undefined
            compact:function()
            {
                return this.select
                (    function($value) 
                    {
                        return $value!=null;
                    }
                );                
            },            
            //->返回数组头一个元素
            first:function()
            {
                return this[0];
            },
            //->合并数组中的子数组
            flatten:function()
            {
                return this.inject
                (
                    [],
                    function($array,$value) 
                    {
                        return $array.concat(Object.isArray($value) ? $value.flatten():[$value]);
                    }
                );            
            },
            //->检测数组中是否有相应对象
            include:function($object)
            {
                return this.indexOf($object)!=-1 ? true:false;
            },            
            //->检测数组中是否有相应对象
            indexOf:function($object)
            {
                for(var i=0,length=this.length;i<length;i++)
                {
                    if(this[i]==$object) return i;
                }
                return -1;        
            },
            //->返回数组的字符串形式
            inspect:function()
            {
                return '[' + this.map(Object.inspect).join(', ') + ']';    
            },
            //->返回数组最后一个元素
            last:function()
            {
                return this[this.length-1];
            },    
            //->智能返回数组值
            reduce:function()
            {
                return this.length> 1 ? this:this[0];    
            },    
            //->重构reverse方法
            reverse:function($inline)
            {
                return ($inline!==false ? this:this.toArray())._reverse();    
            },    
            //->返回数组的大小
            size:function() 
            {
                return this.length;
            },            
            //->转换成JSON字符串
            toJSON:function()
            {
                var results=[];
                this.each
                (
                    function($object) 
                    {
                        var value=Object.toJSON($object);
                        if (value!==undefined) results.push(value);
                    }
                );
                return '['+results.join(',')+']';                
            },        
            //->去除相同元素，区分大小写
            uniq:function($sorted)
            {
                return this.inject([], function(array, value, index) {
                if (0 == index || ($sorted ? array.last() != value : !array.include(value)))
                array.push(value);
                return array;
                });
            },        
            //->移除数组元素
            without:function()
            {    
                var values=$A(arguments);
                return this.select
                (
                    function(value) 
                    {
                        return !values.include(value);
                    }
                );            
            }        
        }
    );
%>